package com.saydc.actions.caracteristicas;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.saydc.dao.CaracteristicasDAO;
import com.saydc.dao.PuestosDAO;
import com.saydc.dao.UnidadOrganizativaDAO;
import com.saydc.forms.puestos.especifico.CargaPuestoEspecificoForm;
import com.saydc.model.Caracteristica;
import com.saydc.model.Expertise;
import com.saydc.model.Puesto;
import com.saydc.model.PuestoEspecifico;

public class AgregarCaracteristicasEspecificasAction extends DispatchAction {

	public ActionForward cargar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {

		CargaPuestoEspecificoForm puestoForm = (CargaPuestoEspecificoForm) form;
		PuestoEspecifico puesto = new PuestoEspecifico();
		puesto.setDescGenerica('E');
		puesto.setNombrePuesto(puestoForm.getNombre());
		
		PuestosDAO puestosDao = PuestosDAO.getInstance();
		Puesto puestoGenerico = puestosDao.getPuesto(puestoForm.getPuestoGenerico());
		puesto.setIdPuestoGenerico(puestoGenerico);
		UnidadOrganizativaDAO unidadesDao = UnidadOrganizativaDAO.getInstance();
		puesto.setIdUnidad(unidadesDao.getUnidadOrganizativa(new Integer(puestoForm.getUnidadOrganizativa())));
		puesto.setRemuneracionMinima(Double.parseDouble(puestoForm.getRemMinima()));
		puesto.setRemuneracionMaxima(Double.parseDouble(puestoForm.getRemMaxima()));
		puesto.setEvaluacion(null);
		
		Set<Expertise> expertisesRequeridos = new HashSet<Expertise>();
		int[] expertises = puestoForm.getSeleccionados();
		for(int i=0; i<expertises.length; i++){
			expertisesRequeridos.add(Expertise.getTipoExpertise(expertises[i]));
		}
		puesto.setExpertiseRequerido(expertisesRequeridos);
		
		ArrayList<Caracteristica> caracteristicasHeredadas = new ArrayList<Caracteristica>();
		caracteristicasHeredadas.addAll(puestoGenerico.getCaracRequeridas());
		puesto.setCaracRequeridas(caracteristicasHeredadas);
		
		request.getSession().setAttribute("puesto", puesto);
		
		CaracteristicasDAO dao = CaracteristicasDAO.getInstance();
		List<Caracteristica> listaCaracteristicas = Caracteristica.getCaracteristicasFaltantes(dao.getCaracteristicas(), puesto.getCaracRequeridas());
		request.getSession().setAttribute("listaCarac", listaCaracteristicas);
		return mapping.findForward("agregarCaracteristicas");
	}
	
	public ActionForward agregar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		Puesto puesto = (Puesto)request.getSession().getAttribute("puesto");
		CaracteristicasDAO dao = CaracteristicasDAO.getInstance();
		List<Caracteristica> listaCaracteristicas = Caracteristica.getCaracteristicasFaltantes(dao.getCaracteristicas(), puesto.getCaracRequeridas());
		request.getSession().setAttribute("listaCarac", listaCaracteristicas);
		return mapping.findForward("agregarCaracteristicasEspecificas");
	}
	
}
